package statePattern

/**
 * 状态模式:
 * 当一个对象内在状态改变时允许改变行为,这个对象看起来像改变了其类型.
 * 状态模式的核心是封装,状态的变更引起的变动,从外部看来就好像该对象对应的类发生改变一样.
 *
 * 角色:
 * 抽象状态(State):该角色用以封装环境对象的一个特定状态所对应的行为.
 * 具体状态(Concrete State):该角色实现环境的一个状态所对应的行为.
 * 环境(Context):该角色定义客户端需要的接口,并负责具体状态的切换,它会保留一个具体状态类的实例,
 * 该实例给出环境对象的现有状态.
 *
 * 状态模式的使用场景:
 * 1.对象的行为依赖于他所处的状态,即行为随状态改变而改变.
 * 2.对象在某个方法里依赖于一重或多重条件分支语句,此时可以使用状态模式将分支语句中的每一个分支都包装到一个单独的类中,
 * 使得这些条件分支语句能够以类的方式独立存在和演化,如此,维护这些独立的类就不再影响到系统的其他部分
 *
 *
 * 思考:状态模式与策略模式的区别
 *
 * 代码示例:
 * 使用状态模式模拟电视频道的切换过程
 */
fun main() {
    val tv = TV()
    tv.disCCTV1()
    tv.disCCTV2()
    tv.disCCTV3()
    tv.disCCTV4()
}